#!/bin/bash

ME=`whoami`

export MPS_DEFAULT=5
export MMP_DEFAULT=5
export TIME_CHEQ_DEFAULT=5
export P_SUSPEND_DEFAULT=5
export PATH_SUSPEND_DEFAULT="/home/$ME/"
export TIME_TRAVEL_LTT_DEFAULT=2
export TIME_TRAVEL_PRT_DEFAULT=2
export INSTANCIAS_IOT_DEFAULT=1
export ORD_LISTOS_DEFAULT="FIFO"
export TIME_CPU_DEFAULT=1
export TIME_IO_DEFAULT=2
export TIME_TRAVEL_STT_DEFAULT=2


#####################################################################################################################

function configurar () {

# Parametros de MLP

echo "Ingrese la cantidad de procesos máximo que se pueden iniciar en el sistema"
read MPS
	if [ -z $MPS ]; then
		MPS=$MPS_DEFAULT
	fi
export MPS

echo "Ingrese la cantidad de procesos máximo que pueden estar en memoria real al mismo tiempo"
read MMP
	if [ -z $MMP ]; then
		MMP=$MMP_DEFAULT
	fi
export MMP

echo "Ingrese el intervalo de tiempo de chequeo del estado del sistema"
read TIME_CHEQ
	if [ -z $TIME_CHEQ ]; then
		TIME_CHEQ=$TIME_CHEQ_DEFAULT
	fi
export TIME_CHEQ

echo "Ingrese la cantidad máxima de procesos que se pueden suspender en un ciclo"
read P_SUSPEND
	if [ -z $P_SUSPEND ]; then
		P_SUSPEND=$P_SUSPEND_DEFAULT
	fi
export P_SUSPEND

echo "Ingrese la ruta del directorio donde se guardaran los procesos suspendidos"
read PATH_SUSPEND
	if [ -z $PATH_SUSPEND ]; then
		PATH_SUSPEND=$PATH_SUSPEND_DEFAULT
	fi
export PATH_SUSPEND

echo "Ingrese el tiempo en segundos que le insume al LTT llevar un programa de una lista a otra"
read TIME_TRAVEL_LTT
	if [ -z $TIME_TRAVEL_LTT ]; then
		TIME_TRAVEL_LTT=$TIME_TRAVEL_LTT_DEFAULT
	fi
export TIME_TRAVEL_LTT

echo "Ingrese el tiempo en segundos que le insume al PRT llevar un proceso de una lista a otra"
read TIME_TRAVEL_PRT
	if [ -z $TIME_TRAVEL_PRT ]; then
		TIME_TRAVEL_PRT=$TIME_TRAVEL_PRT_DEFAULT
	fi
export TIME_TRAVEL_PRT

# Parametros de PCP

echo "Ingrese la cantidad de instancias del hilo IOT"
read INSTANCIAS_IOT
	if [ -z $INSTANCIAS_IOT ]; then
		INSTANCIAS_IOT=$INSTANCIAS_IOT_DEFAULT
	fi
export INSTANCIAS_IOT

echo "Ingrese el ordenamiento de la lista de listos"
read ORD_LISTOS
	if [ -z $ORD_LISTOS ]; then
		ORD_LISTOS=$ORD_LISTOS_DEFAULT
	fi
export ORD_LISTOS

echo "Ingrese el intervalo de tiempo en segundos que insume cada instrucción de CPU"
read TIME_CPU
	if [ -z $TIME_CPU ]; then
		TIME_CPU=$TIME_CPU_DEFAULT
	fi
export TIME_CPU

echo "Ingrese el intevalo de tiempo en segundos que insume cada instrucción de I/O"
read TIME_IO
	if [ -z $TIME_IO ]; then
		TIME_IO=$TIME_IO_DEFAULT
	fi
export TIME_IO

echo "Ingrese el tiempo en segundos que le insume al STT llevar un proceso de una lista a la otra"
read TIME_TRAVEL_STT
	if [ -z $TIME_TRAVEL_STT ]; then
		TIME_TRAVEL_STT=$TIME_TRAVEL_STT_DEFAULT
	fi
export TIME_TRAVEL_STT
}

##################################################################################################################

function config_inic () {

. /usr/local/bin/do.sh configurar
. /usr/local/bin/do.sh iniciar

}

##################################################################################################################

function resetear () { 

# Parametros de MLP

export MPS=$MPS_DEFAULT
export MMP=$MMP_DEFAULT
export TIME_CHEQ=$TIME_CHEQ_DEFAULT
export P_SUSPEND=$P_SUSPEND_DEFAULT
export PATH_SUSPEND=$PATH_SUSPEND_DEFAULT
export TIME_TRAVEL_LTT=$TIME_TRAVEL_LTT_DEFAULT
export TIME_TRAVEL_PRT=$TIME_TRAVEL_PRT_DEFAULT

# Parametros de PCP

export INSTANCIAS_IOT=$INSTANCIAS_IOT_DEFAULT
export ORD_LISTOS=$ORD_LISTOS_DEFAULT
export TIME_CPU=$TIME_CPU_DEFAULT
export TIME_IO=$TIME_IO_DEFAULT
export TIME_TRAVEL_STT=$TIME_TRAVEL_STT_DEFAULT

echo "Valores puestos en Default"

}

###################################################################################################################

function mostrar () {

echo "---------------------------------------------------------------------------------	"
echo "			VALOR DE LOS PARAMETROS DE CONFIGURACION		      	"
echo "---------------------------------------------------------------------------------	"
echo "										      	"
echo "				VALORES DE MLP					      	"
echo "				--------------					      	"
echo " Maximo de procesos que se pueden iniciar en el sistema (MPS) = $MPS	      	"
echo " Maximo nivel de multiprogramacion (MMP) = $MMP				      	"
echo " Intervalo de tiempo de chequeo del estado del sistema = $TIME_CHEQ	      	"
echo " Cantidad máxima de procesos que se pueden suspender en un ciclo = $P_SUSPEND   	"
echo " Ruta del directorio donde se guardarán los procesos suspendidos = $PATH_SUSPEND 	"
echo " Tiempo que insume al LTT llevar un programa de una lista a otra = $TIME_TRAVEL_LTT"
echo " Tiempo que insume al PRT llevar un proceso de una lista a otra = $TIME_TRAVEL_PRT "
echo "											"
echo "				VALORES DE PCP						"
echo "				---------------						"
echo " Cantidad de instancias del hilo IOT = $INSTANCIAS_IOT				"
echo " Ordenamiento de la lista de listos = $ORD_LISTOS					"
echo " Intervalo de tiempo que insume cada instrucción de CPU = $TIME_CPU  		"
echo " Intervalo de tiempo en segundos que insume cada instrucción de I/O= $TIME_IO     "
echo " Tiempo que le insume al STT llevar un proceso de una lista a otra = $TIME_TRAVEL_STT"

}

####################################################################################################################

function iniciar () {

PIDMLP=`ps -e | grep "MLP" | awk '{print $1}'`

	if [ -z $PIDMLP ]; then
		mlp 
	fi

}

####################################################################################################################

function detener () {

	PIDMLP=`ps -e | grep "MLP" | awk '{print $1}'`
	kill -15 $PIDMLP

}

####################################################################################################################

case $1 in
	"Configurar"|"configurar")
		case $2 in
			"Iniciar"|"iniciar")
				config_inic
				;;
			"Resetear"|"resetear")
				resetear
				;;
			"Mostrar"|"mostrar")
				mostrar
				;;
			"")
				configurar
				;;
			*) echo "Segundo Parámetro incorrecto"
		esac
		;;

	"Iniciar"|"iniciar")
		iniciar
		;;
	"Detener"|"detener")
		detener
		;;
	*) echo "Parámetro incorrecto"
	;;
esac
			

			
			
		
	





































